package modelo.carrera;

import modelo.escenario.Ciudad;
import modelo.escenario.Cruce;
import modelo.escenario.Recorrido;
import modelo.escenario.Transitable;
import modelo.vehiculos.Vehiculo;

public class Jugador {

	private String nombre;
	private Vehiculo vehiculo;
	private int tiempo;
	private int puesto;
	private boolean activo;
	private Carrera carrera;
	private boolean finalizocarrera;
			
	public Jugador( String nombre, Vehiculo vehiculo){
		this.nombre = nombre;
		this.vehiculo = vehiculo;
		this.tiempo = 0;
		this.activo = true;
		this.finalizocarrera = false;
	}
	
	// se actualiza los puntos y el tiempo
	public void actualizar()
	{
		for (Infraccion infraccion: vehiculo.getInfracciones())
		{
			vehiculo.getConductor().actualizarPuntoCarnet( infraccion.getPuntos());
			activo = (vehiculo.getConductor().getPuntos()>0);
			tiempo += infraccion.getTiempo();
		}
		vehiculo.clearInfracciones();
		
		if (vehiculo.getChocado() || vehiculo.getLlegado()){
			this.activo = false;
		}
	}

	/*private boolean llegoAPuntoDestino()
	{

		Transitable zonaLLegada  = Ciudad.getCiudad().getTransitable(carrera.getPuntoLLegada());
		if (zonaLLegada != null)
			this.finalizocarrera = !zonaLLegada.contienePosicion(vehiculo.getPosicion());
		
		return finalizocarrera;
	}*/

	public void setPuesto(int puesto){
		this.puesto = puesto;
	}

	public int getTiempo(){
		return this.tiempo;
	}

	public int getPuesto(){
		return this.puesto;
	}
	public String getNombre(){
		return this.nombre;
	}
		
	public Vehiculo getVehiculo(){
		return this.vehiculo;
	}
	
	public boolean isActivo() {
		return activo;
	}

	public boolean finalizoCarrera(){
		return finalizocarrera;
	}
	
	public int getPuntos(){
		return vehiculo.getConductor().getPuntos();
	}

	public void setCarrera(Carrera carrera) {
		this.carrera = carrera;
	
		Ciudad ciudad = Ciudad.getCiudad();
		Cruce cruceLargada = ciudad.getCruce(carrera.getPuntoLargada());
		Cruce cruceLlegada = ciudad.getCruce(carrera.getPuntoLLegada());
		
		Recorrido recorrido = new Recorrido(ciudad.getGuiaT());
		recorrido.setCruceDesde(cruceLargada);
		recorrido.setCruceHasta(cruceLlegada);
		
		this.vehiculo.setRecorrido(recorrido);
	}

	public Carrera getCarrera() {
		return carrera;
	}
}
